package com.llcngu.util.base;

import java.io.Serializable;
import java.util.List;

/**
 * 树形结构数据基础接口类，自定义的树结构实体类需实现该接口才能使用{@link com.llcngu.util.util.BaseTreeUtil}工具类进行操作
 * @author llcngu
 * @version v1.0
 * @date 2021/5/14 21:04
 * @since v1.0
 */
public interface BaseTree extends Serializable {

    /**
     * 获取节点ID
     * @author llcngu
     * @date 2021/5/14 21:04
     * @return String 节点ID
     */
    String getId();

    /**
     * 获取父节点ID
     * @author llcngu
     * @date 2021/5/14 21:04
     * @return String 父节点ID
     */
    String getParentId();

    /**
     * 获取节点层级
     * @author llcngu
     * @date 2021/5/14 21:04
     * @return Integer 节点层级
     */
    Integer getLevel();

    /**
     * 获取节点类型（叶子节点||非叶子节点）
     * @author llcngu
     * @date 2021/5/14 21:04
     * @return Boolean 节点类型
     */
    Boolean getLeafFlag();

    /**
     * 获取子节点列表
     * @author llcngu
     * @date 2021/5/14 21:04
     * @return List 子节点列表
     */
    List<? extends BaseTree> getChildren();

    /**
     * 设置节点ID
     * @author llcngu
     * @date 2021/5/14 21:04
     * @param id 节点ID
     */
    void setId(String id);

    /**
     * 设置父节点ID
     * @author llcngu
     * @date 2021/5/14 21:04
     * @param parentId 父节点ID
     */
    void setParentId(String parentId);

    /**
     * 设置节点层级
     * @author llcngu
     * @date 2021/5/14 21:04
     * @param level 节点层级
     */
    void setLevel(Integer level);

    /**
     * 设置节点类型（叶子节点，非叶子节点）
     * @author llcngu
     * @date 2021/5/14 21:04
     * @param leafFlag 节点类型
     */
    void setLeafFlag(Boolean leafFlag);

    /**
     * 设置子节点列表
     * @author llcngu
     * @date 2021/5/14 21:04
     * @param children 子节点列表
     */
    void setChildren(List<? extends BaseTree> children);
}
